#include <iostream>
using std::cout;
using std::endl;

/* int num = 1; */
//匿名空间中的实体注意避免与全局位置冲突
namespace
{
int num = 100;
}

namespace wd
{
int num = 2;

class Example{
public:
    void print(int num) const{
        cout << "参数num:" << num << endl;
        cout << "数据成员num:" << this->num << endl;
        cout << "数据成员num:" << Example::num << endl;
        cout << "wd::num:" << wd::num << endl;
        cout << "全局位置的num:" << ::num << endl;


    }
private:
    int num = 10;
};

}

//MemberFunction是一个类名，这是一个成员函数指针（成员指针）类
//声明时即限定了它的对象（指针）只能指向wd命名空间中
//Example类里的成员函数（void 函数名(int) const）
typedef void (wd::Example::*MemberFunction)(int) const;

void test0(){
    wd::Example ex;
    ex.print(5);

    //作用域限定符::优先级高于取地址&
    MemberFunction mf = &wd::Example::print;
    (ex.*mf)(7);

    wd::Example * pex = new wd::Example;
    (pex->*mf)(9);
}

int main(void){
    test0();
    return 0;
}
